////
////  demo_orb.cpp
////  BoW
////
////  Created by CADCG on 16/4/22.
////  Copyright © 2016年 CADCG. All rights reserved.
////
//
//#include <iostream>
//#include <vector>
//
//
//// OpenCV
//#include <opencv/cv.h>
//#include <opencv/highgui.h>
//#if CV24
//#include <opencv2/nonfree/features2d.hpp>
//#endif
//
//#include "TemplatedVocabulary.h"
//#include "BoWWrapper.hpp"
//#include "ORB.h"
//using namespace std;
//using namespace cv;
//
//
//using namespace DBoW2;
//using namespace DUtils;
//using namespace std;
//typedef DBoW2::FORB::pDescriptor pDescriptor;
//using namespace markerAR;
///*
// L1_NORM,
// L2_NORM,
// CHI_SQUARE,
// KL,
// BHATTACHARYYA,
// DOT_PRODUCT,
// */
//int main(int argc,char**argv)
//{
//    const int k = 9;
//    const int L = 4;
//    const WeightingType weight = TF_IDF;
//    const ScoringType score = L1_NORM;
//    cv::Mat a;
//    
//    char fileName[100];
//    sprintf(fileName, "/Users/fg/cycle/images/Query%d.jpg",4);
//    a = imread(fileName);
//    if (a.empty()) {
//        cout<<"empty image"<<endl;
//    }
//    cv::Mat empty = Mat::zeros(a.size(), a.type());
//    markerAR::ORB orbTrain(10,2000);
//    markerAR::ORB orbDetect(10,2000);
//    BoWWrapperORB bow(k,L,weight,score);
//    //  cv::VideoCapture vc(0);
//    
//    std::vector<KeyPoint> kpts;
//    cv::Mat desp;
//    vector<Mat> Markers;
//    for (int i=0; i<4; ++i) {
//        sprintf(fileName, "/Users/fg/cycle/images/Marker%d.jpg",i);
//        a = imread(fileName);
//        Markers.push_back(a);
//        orbTrain(a,Mat(),kpts,desp);
//        bow.addImage(kpts,desp);
//    }
//    bow.train();
//    
//    for (int i=0; i<75; ++i) {
//        
//        sprintf(fileName, "/Users/fg/Desktop/images/Image%04d.jpg",i);
//        a = imread(fileName);
//        orbDetect(a,Mat(),kpts,  desp);
//        auto ret = bow.query(kpts,desp);
//        
//        imshow("Query", a);
//        if (ret.size()>0)
//        {
//            imshow("Match1",Markers[ret[0].id]);
//            Mat warp;
//            warpPerspective(Markers[ret[0].id], warp, ret[0].Htq.inv(), Markers[0].size());
//            imshow("warp1", warp);
//            
//        }
//        else
//            imshow("Match1",empty);
//        if(ret.size()>1)
//        {
//            imshow("Match2",Markers[ret[1].id]);
//            Mat warp;
//            warpPerspective(Markers[ret[1].id], warp, ret[1].Htq.inv(), Markers[1].size());
//            imshow("warp2", warp);
//            
//        }
//        else
//            imshow("Match2",empty);
//        cvWaitKey(0);
//        
//    }
//    //
//    //  bow.train();
//    //  while (1)
//    //  {
//    //    vc>>a;
//    //    orb(a,Mat(),kpts,desp);
//    //    auto ret = bow.query(desp);
//    //    imshow("Query", a);
//    //    imshow("Match1",Markers[ret[0].Id]);
//    //
//    //    imshow("Match2",Markers[ret[1].Id]);
//    //    cvWaitKey(10);
//    //  }
//}